message 輸入 123 的話會變成下方那樣,而我不管輸入什麼,都只會改變<>裡的文字
index.js
const app = express();
const { exec } = require('child_process');
app.use(express.static('public'));
app.get('/cowsay/:message', (req, res) => {
exec(`/usr/games/cowsay ${req.params.message}`, {timeout: 5000}, (error, stdout) => {
if (error) return res.status(500).end();
res.type('txt').send(stdout).end();
});
});
app.listen(3000, () => {
console.log('listening');
});
上方的 code 中,exec 直接執行來自 URL 參數的命令,這可能會導致 command injection
那就來試試看input ls
真的可以執行 command injection
待補待補待補待補待補待補待補待補待補待補